perm filename TRNPUT.LSP[SCH,LSP] blob
sn#688853 filedate 1982-11-14 generic text, type C, neo UTF8
COMMENT ā VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 -*- LISP -*-
C00004 00003
C00009 00004
C00010 ENDMK
Cā;
;;; -*- LISP -*-
(HERALD TRNPUT "")
(DECLARE (*LEXPR SCH-ERROR))
;;;; Internal Transput Routines
(DECLARE (SPECIAL *ibase* *obase* *outstream* *outstreams*
*script-stream* *implode-sfa*))
(DECLARE (SPECIAL *NOPRINT* *implodable*))
;;; Gjc-reader and related functions:
;(include "scm:gjc-re")
(defun schreadch args (ascii (apply #'tty-tyi (listify args))))
;;; functions strictly for TTY output.
(DEFUN SCHBEEP-AT-USER ()
(TYO #\BELL TYO)
*NOPRINT*)
(DEFUN SCHTERPRI () (SCH-TERPRI *OUTSTREAM*))
(DEFUN SCHTYO (X) (SCH-TYO X *OUTSTREAM*))
;;; stream output operations.
(DEFUN SCH-TYO (X STREAM)
(TYO X STREAM)
*NOPRINT*)
(DEFUN SCH-TERPRI (STREAM)
(TERPRI STREAM)
*NOPRINT*)
(DEFUN SCH-PRIN1 (FORM STREAM)
(PRIN1 FORM STREAM)
*NOPRINT*)
;;; Include the Waters printer and scheme modifications:
;(INCLUDE "SPRINT.lsp")
;;;; I/O Support
;;; (SCH-OUTSTREAM-HANDLER self op data) - An SFA which takes all output
;;; fed to it and outputs it to any streams on *OUTSTREAMS*.
(DEFUN SCH-OUTSTREAM-HANDLER (SELF OP DATA)
(CASEQ OP
((WHICH-OPERATIONS) '(TYO CHARPOS LINEL))
((TYO)
(IF (NOT (MINUSP DATA)) (TYO DATA *OUTSTREAMS*)))
((CHARPOS LINEL)
(FUNCALL OP (CAR *OUTSTREAMS*)))
(T ; Bad error
(SCH-ERROR "SCHEME Bug: Please report this. Illegal output SFA operation."
`(SFA-CALL ,SELF ,OP ,DATA)))))
(DEFUN SCH-FRESH-LINE (STREAM)
(COND ((AND (SFAP STREAM)
(MEMQ 'FRESH-LINE (SFA-CALL STREAM 'WHICH-OPERATIONS NIL )))
(SFA-CALL STREAM 'FRESH-LINE NIL))
((NOT (ZEROP (CHARPOS STREAM)))
(TERPRI STREAM)))
*NOPRINT*)
(DEFUN SCHFRESH-LINE ()
(SCH-FRESH-LINE *OUTSTREAM*))
(DEFUN CLEAR-SCREEN ()
(CURSORPOS 'C)
*NOPRINT*)
;;; Hardcopy control functions
;;;
(DEFUN SCH-PHOTO (FILENAME)
(COND (*SCRIPT-STREAM* (SCHPRINT ";Shutter already open"))
(T (SETQ āR T)
(SETQ *SCRIPT-STREAM*
(OPEN (COND ((STATUS FEATURE TOPS-20)
(MERGEF FILENAME
`((PS ,(STATUS UDIR)) SCHEME OUTPUT /-1)))
((STATUS FEATURE ITS)
(MERGEF FILENAME
`((DSK ,(STATUS UDIR)) SCHDRB >)))
(T FILENAME))
'OUT))
(PUSH *SCRIPT-STREAM* *OUTSTREAMS*)
(PUSH *SCRIPT-STREAM* ECHOFILES)
(PUSH *SCRIPT-STREAM* MSGFILES)
*NOPRINT*)))
(DEFUN SCH-TOFU ()
(COND ((NOT *SCRIPT-STREAM*) (SCHPRINT ";Shutter already closed"))
(T (SETQ āR NIL)
(SETQ MSGFILES (DELETE *SCRIPT-STREAM* MSGFILES))
(SETQ ECHOFILES (DELETE *SCRIPT-STREAM* ECHOFILES))
(SETQ *OUTSTREAMS*
(DELETE *SCRIPT-STREAM* *OUTSTREAMS*))
(CLOSE *SCRIPT-STREAM*)
(SETQ *SCRIPT-STREAM* NIL)
*NOPRINT*)))
;;; (SCH-IMPLODE char-list) - A SCHEME version of Maclisp's READLIST.
;;; (SCH-IMPLODE-HANDLER self op data) - An SFA helper for SCH-IMPLODE.
(DEFUN SCH-IMPLODE (CHAR-LIST)
(LET ((*IMPLODABLE* CHAR-LIST))
(READ *IMPLODE-SFA*)))
(DEFUN SCH-IMPLODE-HANDLER (SELF OP DATA)
(CASEQ OP
(WHICH-OPERATIONS '(UNTYI TYI))
(UNTYI (PUSH DATA *IMPLODABLE*))
(TYI (COND ((NULL *IMPLODABLE*) ; Out of chars?
(SETQ *IMPLODABLE* T) ; Set flag to avoid infinite loop
#\SPACE) ; Output a trailing break char
((ATOM *IMPLODABLE*) ; Check for infinite loop
(sch-error "IMPLODE ran out of characters"))
(T
(LET ((CHAR (POP *IMPLODABLE*)))
(COND ((SYMBOLP CHAR) (GETCHARN CHAR 1.))
(T CHAR))))))
(T (SCH-ERROR "UnSupported Operation" (LIST 'SFA-CALL SELF OP DATA)))))
(DEFUN SCHPEEKCH ()
(ASCII (TYIPEEK)))
(DEFUN SCHCVTN (X)
(GETCHARN X 1.))
;;; Initialize special printer variables
(SETQ *IBASE* 10.
*OBASE* 10.
*OUTSTREAM* (SFA-CREATE 'SCH-OUTSTREAM-HANDLER 0. "Output Handler")
*OUTSTREAMS* (NCONS TYO)
*SCRIPT-STREAM* NIL
*IMPLODE-SFA* (SFA-CREATE 'SCH-IMPLODE-HANDLER 0. "Implode Handler"))